import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta clase representa a un apuntador de botones o espacios.
 * @author Miguel Martinez Aguilar
 * @version 25 de Marzo del 2013
 */
public class Apuntador extends Actor
{
    // Declaracion de variables de instancia
    protected Actor alguien;// es un actor, puede ser un espacio o un boton.
    private MouseInfo mouse;// es una referencia a informacion del mouse.
    protected boolean activo;// es un boleano que determina si este apuntador esta activo.
    
    /**
     * Este es el constructor de Apuntador.
     */
    public Apuntador()
    {
        alguien = null;
        mouse = null;
        activo = true;
    }

    /**
     * Este es el metodo que cambia la ubicacion del puntero a la ubicacion del mouse.
     */
    public void cambiaCoordenadas()
    {
        mouse = Greenfoot.getMouseInfo();
        if(mouse!=null)this.setLocation(mouse.getX(),mouse.getY());
    }
    
    /**
     * Este es el metodo que verifica si se ha realizado un click con el mouse. <p>
     * Regresa un boleano que indica si se ha realizado un clic.
     */
    public boolean clickValido()
    {
        boolean val = false;
        if(Greenfoot.mouseClicked(null)){
            activo = true;
            if(this.ubicaObjeto(false))val = true;
        }
        else{
            if(Greenfoot.mousePressed(null)){
                if(this.ubicaObjeto(false)){
                    ((Espacio)alguien).resalta(false);
                    activo = false;
                }
            }
        }
        return val;
    }
    
    /**
     * Este es el metodo que checa si el puntero se encuentra con un objeto. <p>
     * Regresa un boleano que indica si el cursor esta sobre un objeto.
     * @param quien: boleano que indica que tipo de Actor se va a devolver.
     */
    public boolean ubicaObjeto(boolean quien)
    {
        if(quien)alguien = super.getOneObjectAtOffset(0,0,Boton.class);
        else alguien = super.getOneObjectAtOffset(0,0,Espacio.class);
        if(alguien != null)return true;
        else return false;
    }
}
